package inter

import (
	"time"

	"gamesdk/clock"
	"gamesdk/msg"

	"github.com/golang/protobuf/proto"
)

type AIUserInter interface {

	//GetUID 获取UID
	GetUID() int64

	//获取ip
	GetIp() string

	/*
	*获取用户ID
	*返回值说明:
	*@return:int   		用户ID
	 */
	GetId() int64
	/*
	*获取用户积分
	*返回值说明:
	*@return:int   		积分
	 */
	GetScore() int64
	/*
	*获取用户积分
	*返回值说明:
	*@return:int   		积分
	 */
	GetRoomID() int64
	//发送消息到服务器
	SendMsgToServer(subCmd int32, pb proto.Message) error
	//添加定时器
	AddTimer(actionInterval time.Duration, jobFunc func()) (job *clock.Job, ok bool)
	//添加定时器
	AddTimerRepeat(interval time.Duration, actionMax uint64, jobFunc func()) (jobScheduled *clock.Job, inserted bool)
	//机器人离开房间
	LeaveRoom() error
}

/*
*用户提供的借口
 */
type UserInetr interface {

	//GetUID 获取UID
	GetUID() int64

	//WriteLogs 发送日志
	SendLogs(gameNum string, records []*msg.GameLog)
	//生成局号
	GetRoomNum() string
	//发送战绩
	//gameNum 局号
	//profitAmount 盈利
	//betsAmount 总下注
	//drawAmount 总抽水
	//outputAmount 总产出
	//endCards 结算牌
	SendRecord(gameNum string, profitAmount, betsAmount, drawAmount, outputAmount int64, endCards string)
	//获取ip
	GetIp() string
	//获取城市
	GetCity() string
	//获取用户性别
	GetSex() int32
	//创建跑马灯，content 跑马灯内容
	CreateMarquee(content string) error
	//上庄
	UpBanker()
	//下庄
	DownBanker()
	//发送打码量
	SendChip(chip int64)
	//获取点控级别
	GetProb() int32
	//绑定机器人逻辑
	BindRobot(interRobot RobotInter) AIUserInter
	/*
	*用户游戏开始
	*返回值说明:
	*@return:string   		昵称
	 */
	//GameRun()
	/*
	*用户游戏结束
	*返回值说明:
	*@return:string   		昵称
	 */
	//GameEnd()
	/*
	*设置状态
	*返回值说明:
	*@return:string   		昵称
	 */
	SetStatus(status int)
	/*
	*获取用户昵称
	*返回值说明:
	*@return:string   		昵称
	 */
	GetNike() string

	/*
	*获取用户头像
	*返回值说明:
	*@return:string   		用户头像
	 */
	GetHead() string

	/*
	*获取用户ID
	*返回值说明:
	*@return:int   		用户ID
	 */
	GetId() int64

	/*
	*获取用户积分
	*返回值说明:
	*@return:int   		积分
	 */
	GetScore() int64

	/*
		*获取用户积分
		*参数说明:
		*@param:gameNum		局号
		*@param:score		积分
		*@param:tax			税收（万分比）
		*返回值
		@return int64扣完税的钱
	*/
	SetScore(gameNum string, score int64, tax int64) (int64, error)
	/*
	*获取椅子ID
	*返回值说明:
	*@return:id   		椅子ID
	 */
	GetChairId() int

	/*
	*设置用户数据
	*参数说明:
	*@param:data		用户数据
	 */
	SetTableData(data string)

	/*
	*获取用户数据
	*返回值说明:
	*@return:data   		用户数据
	 */
	GetTableData() string

	/*
	*删除用户数据
	*返回值说明:
	 */
	DelTableData()

	/*
	*用户发送消息
	*参数说明:
	*@param:subCmd		消息类型
	*@param:pb		消息
	*返回值说明:
	*@return:error   	错误
	 */
	SendMsg(subCmd int32, pb proto.Message) error

	/*
	*判断用户是否为机器人--逻辑
	*参数说明:
	*@param:bool	true是机器人 false不是机器人
	 */
	IsRobot() bool
}
